﻿/********************************************
 * 
 * Jim Trebbien
 * 
 * *****************************************/


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Model;



namespace køreplansopgave
{
    class Program
    {
        private Graf graf;
        private RegKøreplan regKoreplan;
        private Inputreader inputreader;


        public Program()
        {
            
            this.regKoreplan = new RegKøreplan();
            testdata();


            string txt = new FileReader().Read();                   //"#44 odense 14:00 middelfart 15:07 #52 Herning 16:00 Svendborg 17:34@"; //@ er stoptegn
            Queue<char> txtQueue = new Queue<char>(txt);
            this.inputreader = new Inputreader(txtQueue);
            inputreader.Scan();
            List<string> leksemer = inputreader.GetLeksemer();
            foreach (string s in leksemer)
                Console.WriteLine(s);
           
           
            Console.ReadLine();
            this.graf = new Graf();
            graf.DanGraf(20);       //Den her skal saettes efter hvor mange byer der er. 20 er bare test
            DanGraf();
            //graf.MinimumSpanningTree(graf);
        }

        private void testdata()
        {
            Afgang afgang1 = new Afgang("Odense", 1, 23);
            Afgang afgang2 = new Afgang("Svendborg", 0, 33);
            Køreplan kp = new Køreplan(44);
            kp.AddAfgang(afgang1);
            kp.AddAfgang(afgang2);
            regKoreplan.AddKøreplaner(kp);
        }


        //lav lige det her paenere jim ಠ_ಠ
        private void DanGraf()
        {
            int time, min, placering1, placering2 ;
            

            for (int i = 0; i < regKoreplan.Køreplaner.Count; i++)
            {
                for (int j = 0; j < regKoreplan.Køreplaner[i].afgangsliste.Count; j++)
                {
                    placering1 = graf.FindNode(regKoreplan.Køreplaner[i].afgangsliste[j].BYNAVN);
                    if (placering1 < 0)             
                        graf.AddNode(new Node(regKoreplan.Køreplaner[i].afgangsliste[j].BYNAVN));
                    if (j+1 < regKoreplan.Køreplaner[i].afgangsliste.Count)
                    {
                        placering2 = graf.FindNode(regKoreplan.Køreplaner[i].afgangsliste[j + 1].BYNAVN);
                        if (placering2 < 0)
                            graf.AddNode(new Node(regKoreplan.Køreplaner[i].afgangsliste[j + 1].BYNAVN));

                        time = regKoreplan.Køreplaner[i].afgangsliste[j + 1].TIME - regKoreplan.Køreplaner[i].afgangsliste[j].TIME;
                        min = regKoreplan.Køreplaner[i].afgangsliste[j + 1].MINUT - regKoreplan.Køreplaner[i].afgangsliste[j].MINUT;

                        int totalTidIMin = min+(60*time);
                       
                        graf.Kanter[placering1,placering2] = totalTidIMin;
                        graf.Kanter[placering2,placering1] = totalTidIMin;

                    }
                    else return; //der er ikke flere afgange
                }
            }
        }



     

        static void Main(string[] args)
        {
            new Program();
        }
    }
}
